fn main() {
    my::indirect_call();
}
fn func() {
    println!("func..");
}

mod cool {
    pub fn func() {
        println!("cool::func()");
    }
}
mod my {
    fn func() {
        println!("my::func()");
    }
    mod cool {
        pub fn func() {
            println!("my::cool::func()");
        }
    }
    pub fn indirect_call() {
        //my.func
        self::func();
        func();

        //my.cool.func()
        cool::func();
        self::cool::func();

        //crate::func()
        super::func();

        use crate::cool::func as root_func;
        root_func();
        {
            use crate::cool::func as root_func;
            root_func();
        }
    }
}
